package com.sojson.entity.bo;

import java.io.IOException;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

import com.sojson.base.impl.BaseDto;
import com.sojson.constant.Constant;
import com.sojson.enums.core.ECouponEnable;
import com.sojson.util.DateUtil;
import com.sojson.util.StringUtil;
import com.sojson.util.token.TokenUtil;

import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;

/**
 * 优惠券使用Bean
 * 
 * @author liu
 * @date 2021-06-16
 */
@ApiModel("优惠券使用")
public class CouponUseParam extends BaseDto {

    /***/
    private static final long serialVersionUID = -6661721833092553593L;

    @ApiModelProperty("使用模块编号")
    private String useModuleNo;
    @ApiModelProperty("使用店铺编号")
    private String useStoreNo;
    @ApiModelProperty("使用商品编号")
    private String useGoodsNo;
    @ApiModelProperty("使用商品信息列表")
    private List<CouponUseGoodsParam> couponUseGoodss;
    @ApiModelProperty("是否只查有效的(true:是,false:否)")
    private Boolean isValid;
    @ApiModelProperty("查询关于某商品的(1:查询所有,2:只查某商品的,3:查询所有,但是如果商品不可用就返回不可用标记)")
    private Integer enable;
    @ApiModelProperty("订单金额")
    private BigDecimal orderTotal;
    @ApiModelProperty("当前时间")
    private Date thisTime;
    @ApiModelProperty("所属用户编号")
    private String userNo;
    @ApiModelProperty("查询的截止多久时间")
    private Long abortTime;
    @ApiModelProperty("是否是购物车")
    private Boolean isShop;
    @ApiModelProperty("用户优惠券编号列表")
    private List<String> userCouponNos;

    /** 获取使用模块编号 */
    public String getUseModuleNo() {
        return useModuleNo;
    }

    /** 设置使用模块编号 */
    public void setUseModuleNo(String useModuleNo) {
        this.useModuleNo = useModuleNo;
    }

    /** 获取使用店铺编号 */
    public String getUseStoreNo() {
        return useStoreNo;
    }

    /** 设置使用店铺编号 */
    public void setUseStoreNo(String useStoreNo) {
        this.useStoreNo = useStoreNo;
    }

    /** 获取使用商品编号 */
    public String getUseGoodsNo() {
        return useGoodsNo;
    }

    /** 设置使用商品编号 */
    public void setUseGoodsNo(String useGoodsNo) {
        this.useGoodsNo = useGoodsNo;
    }

    /** 获取使用商品信息列表 */
    public List<CouponUseGoodsParam> getCouponUseGoodss() {
        return couponUseGoodss;
    }

    /** 设置使用商品信息列表 */
    public void setCouponUseGoodss(List<CouponUseGoodsParam> couponUseGoodss) {
        this.couponUseGoodss = couponUseGoodss;
    }

    /** 获取是否只查有效的(true:是,false:否) */
    public Boolean getIsValid() {
        return isValid;
    }

    /** 设置是否只查有效的(true:是,false:否) */
    public void setIsValid(Boolean isValid) {
        this.isValid = isValid;
    }

    /** 获取查询关于某商品的(1:查询所有,2:只查某商品的,3:查询所有,但是如果商品不可用就返回不可用标记) */
    public Integer getEnable() {
        return enable;
    }

    /** 设置查询关于某商品的(1:查询所有,2:只查某商品的,3:查询所有,但是如果商品不可用就返回不可用标记) */
    public void setEnable(Integer enable) {
        this.enable = enable;
    }

    /** 获取订单金额 */
    public BigDecimal getOrderTotal() {
        return orderTotal;
    }

    /** 设置订单金额 */
    public void setOrderTotal(BigDecimal orderTotal) {
        this.orderTotal = orderTotal;
    }

    /** 获取当前时间 */
    public Date getThisTime() {
        return thisTime;
    }

    /** 设置当前时间 */
    public void setThisTime(Date thisTime) {
        this.thisTime = thisTime;
    }

    /** 获取所属用户编号 */
    public String getUserNo() {
        return userNo;
    }

    /** 设置所属用户编号 */
    public void setUserNo(String userNo) {
        this.userNo = userNo;
    }

    /** 获取查询的截止多久时间 */
    public Long getAbortTime() {
        return abortTime;
    }

    /** 设置查询的截止多久时间 */
    public void setAbortTime(Long abortTime) {
        this.abortTime = abortTime;
    }

    /** 获取是否是购物车 */
    public Boolean getIsShop() {
        return isShop;
    }

    /** 设置是否是购物车 */
    public void setIsShop(Boolean isShop) {
        this.isShop = isShop;
    }

    /** 获取用户优惠券编号列表 */
    public List<String> getUserCouponNos() {
        return userCouponNos;
    }

    /** 设置用户优惠券编号列表 */
    public void setUserCouponNos(List<String> userCouponNos) {
        this.userCouponNos = userCouponNos;
    }

    /** 查询初始化 */
    public void init() {
        List<CouponUseGoodsParam> couponUseGoodss = getCouponUseGoodss();
        if (StringUtil.isBlankObject(couponUseGoodss) || couponUseGoodss.size() < 2) {
            setIsShop(false);
        } else {
            setIsShop(true);
        }
        if (StringUtil.isBlankObject(getIsValid())) {
            setIsValid(true);
        }
        if (StringUtil.isBlankObject(getEnable())) {
            if (StringUtil.isNotBlankObject(getUseModuleNo()) || StringUtil.isNotBlankObject(getUseStoreNo())
                || (StringUtil.isNotBlankObject(couponUseGoodss) && couponUseGoodss.size() > 0)) {
                setEnable(ECouponEnable.SCOPE_GOODS.getCode());
            } else {
                setEnable(ECouponEnable.ALL.getCode());
            }
        }
        if (StringUtil.isNotBlankObject(couponUseGoodss) && couponUseGoodss.size() == 1) {
            setUseGoodsNo(couponUseGoodss.get(0).getUseGoodsNo());
        }
    }

    /** 查询初始化 
     * @throws IOException */
    public void initApp() throws IOException {
        init();

        setUserNo(TokenUtil.getUserNo());
        setThisTime(DateUtil.nowDate());
        setAbortTime(Constant.COUPON_SELECT_ABORT_TIME_DAY);
    }

}